package com.example.demo.nio.chat_room.client;

import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.SocketChannel;
import java.util.Scanner;

public class ClientThread  implements Runnable {
    private String name;
    private SocketChannel socketChannel;

    public ClientThread(String name, SocketChannel socketChannel) {
        this.name = name;
        this.socketChannel = socketChannel;
    }

    @Override
    public void run() {
        /*
            这个操作会导致线程不停的在给服务端发空数据
            仅作客户端测试用,不要实际用它
            因为它的阻塞并且有写入事件，虽然写入的是空
            但是服务端却会疯狂的读取空数据
         */
        Scanner scanner = new Scanner(System.in);
        // 阻塞住,一直准备发消息
        while(scanner.hasNext()){
            String str =scanner.nextLine().trim();
            try {
                // 断开操作,这里关闭通道后会给服务端发送断开信号
                // 服务端收到后会给他返回一个断开信号
                // 在客户端read事件内有处理,可以去那边看
                if("断开连接".equals(str)){
                    socketChannel.write(ByteBuffer.wrap(str.getBytes()));
                    break;
                }
                socketChannel.write(ByteBuffer.wrap((name+":"+str).getBytes()));
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }
    }
}
